/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.ecommercer.dao;

import br.com.ecommercer.bean.Cliente;
import br.com.ecommercer.bean.Perfil;
import br.com.ecommercer.bean.Pessoa;
import br.com.ecommercer.bean.Usuario;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author Tainara
 */
public class ClienteDaoImp implements ClienteDao {

    @Override
    public Object salvar(Object obj) throws Exception {

        PreparedStatement ps = null;
        Connection conn = null;
        Cliente cliente = (Cliente) obj;
        PessoaDao pesDao = new PessoaDaoImp();
        cliente = (Cliente) pesDao.salvar(cliente);
        try {
            String SQL = "INSERT INTO cliente (id_pessoa,cpf, rg) "
                    + "VALUES(?, ?,?)";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);
            ps.setInt(1, cliente.getId());
            ps.setString(2, cliente.getCpf());
            ps.setString(3, cliente.getRg());

            ps.executeUpdate();
        } catch (SQLException se) {
            throw new Exception("Erro ao tentar inserir dados" + se.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps);
        }
        return cliente;
    }

    @Override
    public List<Cliente> pesquisaPorNome(String nome) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void alterar(Object obj) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        Cliente cliente = (Cliente) obj;
        try {
            //String cpf, String rg, Integer id, String nome, String email, String celular, String telefone)
            String SQL = "UPDATE cliente SET cpf = ?, rg = ? WHERE id_pessoa=?";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);
            ps.setString(1, cliente.getCpf());
            ps.setString(2, cliente.getRg());
            ps.setInt(3, cliente.getId());
            ps.executeUpdate();
        } catch (SQLException se) {
            throw new Exception("Erro ao tentar atualizar dados" + se.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps);
        }
    }

    @Override
    public void excluir(int id) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public Object procurar(Integer id) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        Cliente cliente = null;
        Usuario usuario = null;
        Perfil perfil = null;
        try {
            String SQL = "SELECT * FROM cliente cli INNER JOIN pessoa pes ON cli.id_pessoa = pes.id "
                    + "INNER JOIN usuario usu ON usu.id = usu.id "
                    + "INNER JOIN Perfil per ON per.id = usu.perfil_id WHERE cli.id_pessoa = ?";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);
            ps.setInt(1, id);
            rs = ps.executeQuery();
            if (rs.next()) {

                cliente = new Cliente();
                cliente.setCpf(rs.getString("cpf"));
                cliente.setRg(rs.getString("cpf"));
                cliente.setId(rs.getInt("pes.id"));
                cliente.setNome(rs.getString("nome"));
                cliente.setEmail(rs.getString("email"));
                cliente.setCelular(rs.getString("celular"));
                cliente.setTelefone(rs.getString("telefone"));
                //(Integer id, String login, String senha, boolean logado)
                usuario = new Usuario();
                usuario.setLogin(rs.getString("login"));
                usuario.setSenha(rs.getString("Senha"));
                usuario.setLogado(rs.getBoolean("logado"));
                //Integer id, String tipo, String descricao, List<Usuario> usuarios)
                perfil = new Perfil();
                perfil.setId(rs.getInt("per.id"));
                perfil.setTipoAdmin(rs.getBoolean("tipoAdmin"));
                perfil.setDescricao(rs.getString("Descricao"));
                
                usuario.setPerfil(perfil);
                cliente.setUsuario(usuario);
                
                
            }
        } catch (Exception e) {
            System.out.println("ERRO AO PROCURAR" + e);
        }
        return cliente;
    }

    @Override
    public List<Object> listar() throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}